package main;

import list.MeuArrayList;

class Elemento {
	Integer valor;

	public Elemento(Integer valor) {
		this.valor = valor;
	}

	@Override
	public String toString() {
		return String.valueOf(valor);
	}

	// @Override
	// public boolean equals(Object obj) {
	// return this.valor.equals(((Elemento) obj).valor);
	// }
}

public class MainArrayList {

	public static void main(String[] args) {
		MeuArrayList<Elemento> lista = new MeuArrayList<Elemento>(2);

		lista.add(new Elemento(1));
		lista.add(new Elemento(2));
		lista.add(new Elemento(3));
		lista.add(new Elemento(4));
		lista.add(new Elemento(5));

		 removeObjeto(lista, new Elemento(3));
		 removeIndice(lista, 2);
		 addAll(lista);
		 indexOf(lista, new Elemento(1));
		 get(lista, 2);

		System.out.println(lista.toString());

	}

	private static void addAll(MeuArrayList<Elemento> lista) {
		MeuArrayList<Elemento> lista2 = new MeuArrayList<Elemento>();
		lista2.add(new Elemento(9));
		lista2.add(new Elemento(10));

		lista.addAll(lista2);
	}

	// Depende de equals
	private static void removeObjeto(MeuArrayList<Elemento> lista,
			Elemento remover) {
		lista.remove(remover);
	}

	private static void removeIndice(MeuArrayList<Elemento> lista, int indice) {
		lista.remove(indice);
	}

	// Depende de equals
	private static int indexOf(MeuArrayList<Elemento> lista, Elemento e) {
		return lista.indexOf(e);
	}

	private static Elemento get(MeuArrayList<Elemento> lista, int indice) {
		return lista.get(indice);
	}

	private static void set(MeuArrayList<Elemento> lista, int indice, Elemento e) {
		lista.set(indice, e);
	}
	
	// Depende de equals
	private static boolean contains(MeuArrayList<Elemento> lista, Elemento e) {
		return lista.contains(e);
	}
	
}
